package com.stp.rabbitmq.config;

import com.stp.rabbitmq.constant.QueueConstant;
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


/**
 * 交换机 配置 （广播）
 * 假如通过交换机发送10条消息，那么被绑定的两个队列会各收到10条消息
 */
@Configuration
public class FanoutConfig {
    //交换机声明
    @Bean
    public FanoutExchange fanoutExchange(){
        return new FanoutExchange(QueueConstant.COMMON_EXCHANGE);
    }

    /**
     *  1. 配置队列
     *  2. 队列名为 queue
     *  3. true 表示: 持久化 (不填，默认为true,默认持久化)
     *  durable： 队列是否持久化。 队列默认是存放到内存中的，rabbitmq 重启则丢失，
     *  若想重启之后还存在则队列要持久化，
     *  保存到 Erlang 自带的 Mnesia 数据库中，当 rabbitmq 重启之后会读取该数据库
     *  @return
     */
    @Bean
    public Queue FanoutQueueOne(){
        return new Queue(QueueConstant.COMMON_QUEUE_ONE,true);
    }

    //声明队列2
    @Bean
    public Queue FanoutQueueTwo(){
        return new Queue(QueueConstant.COMMON_QUEUE_TWO,true);
    }
    //绑定交换机和队列
    @Bean
    public Binding bindingFanoutQueueOne(Queue FanoutQueueOne,FanoutExchange fanoutExchange){
        return BindingBuilder.bind(FanoutQueueOne).to(fanoutExchange);
    }
    @Bean
    public Binding bindingFanoutQueueTwo(Queue FanoutQueueTwo, FanoutExchange fanoutExchange){
        return BindingBuilder.bind(FanoutQueueTwo).to(fanoutExchange);
    }
}
